“sAVe the Disk 1.5” is a FreeWare system extension (aka INIT) which will
alleviate the following problems experienced by owners of 68k AV Macs:
1) Each time a sound channel is allocated (disposed) some information is read from (written to) the file “DSP Preferences”. Applications which follow Apple's recommendations create and destroy such a channel for each single sound they produce and thus slow down while they torture your harddisk. This problem becomes most obvious with games.
2) Some applications, which take advantage of the maximum resolution supported by a Quickdraw printer, mistakenly fall back to the low default resolution of 72 dpi.
Note that version 1.2 of the “System Enabler 088” (and Systems 7.5 and 7.5.1) both fix the Resource Manager as well as the disk cache problems noticeable with older system software. These patches have been removed from “sAVe the Disk 1.5”. Therefore this version should be used only on 68k AV Macs running System 7.1 with Hardware Update 3.0 installed (or plain System 7.5.x), where “sAVe the Disk 1.5” will fix all remaining known bugs specific to the Quadra 660/840av.
Installation
Simply drop the “sAVe the Disk 1.5” extension onto the icon of the closed system folder and let the Finder place it in the Extensions folder. Then restart your machine. “sAVe the Disk 1.5” will load and display its icon while it installs itself during start-up.
Does it work?
The following is a simple way to test if “sAVe the Disk 1.5” is operating properly. In the Finder select “Page Setup” from the File menu and click outside the dialog box several times. The system beep should sound for each click. However disk activity should only occur prior to the first beep when the actual sound data is read from its resource inside the system file. There should be no disk hits for the repeated sounds. Compare this with the ongoing disk accesses before you installed “sAVe the Disk 1.5”. Now you could enjoy one of your former favorite games without disk noise and without jerky delays degrading animation.
If it doesn't work
As “sAVe the Disk 1.5” uses less than 2k of system memory plus the size of your “DSP Preferences” file (usually less than 0.5k), there should always be sufficient memory available.
Other possible problems include:
— the ROM version is not 1917 (0x770), e.g. you are trying to install “sAVe the Disk 1.5” on a non-AV Mac. Don't do that, “sAVe the Disk 1.5” provides no benefits on non-AV Macs.
— your “DSP Preferences” file is either corrupt or incompatible with the type of AV Mac (660/840) you are using and cannot be deleted. Unprotect or delete the file manually.
— you have an obsolete version of the “System Enabler 088” installed. “sAVe the Disk 1.5” requires at least version 1.1, but was designed to work smoothly with the latest version 1.2 only, available with Hardware Update 3.0 from Apple. With System 7.5.x all the enhancements provided by the latest “System Enabler 088” have been built into the system file itself.
— the file “DSP Preferences” uses a newer format which “sAVe the Disk 1.5” does not recognize. Since the format of this file is not documented (only internal system calls store/retrieve info) Apple is free to change it. There might be an updated version of “sAVe the Disk 1.5” available or you could trash the newer prefs file and let “sAVe the Disk 1.5” maintain the info in the older format. Try this at your own risk!
No icon will be displayed during start-up and no changes to the system will be made, if any of the above problems prevents proper installation.
I developed and tested “sAVe the Disk 1.5” on my Centris/Quadra 660av running System 7.5.1, but it is known to work on a Quadra 840av, too. Some additional testing has been done using System 7.1 with “System Enabler 088” version 1.2 as well as System 7.5. Although “sAVe the Disk 1.5” has not caused me any trouble I'm not responsible for any (unlikely) problems you may experience.
Please note that “sAVe the Disk 1.5” does not fix the problems with games which write to the (on the AV Macs nonexistent) Apple Sound Chip directly and therefore produce no sound at all. You should contact the publisher of such software and ask for a fix or update.
Feel free to contact me at the address given below if you encounter any problems related to “sAVe the Disk 1.5”.
Known Problems
“sAVe the Disk 1.5” works differently than the original system code, if the size of the preference data associated with a given selector changes. This should cause no trouble however, because the original code simply corrupts the prefs file :^)
If you experience problems with the Photoshop DSP plug-in, remember that to my knowledge all existing version of RamDoubler (latest version is 1.5.1) are incompatible with this plug-in. As far as I know “sAVe the Disk 1.5” does not cause the freezes.
How does it work? (optional reading)
1) DSP Preferences
Two subfunctions of the DSPDispatch trap (0xABF5) access the file “DSP Preferences” inside the Preferences folder and cause the sound related disk hits (selector 0x121 to read info, 0x5F to update the info). Both subfunctions are replaced by entirely new routines modelled after the originals. The contents of thefile “DSP Preferences” are read into a relocatable block inside the system heap during start-up. Accesses to preference data just read the info from memory, update it in memory or grow the block and append new information. A shutdown handler will finally update the file on disk (if any info was added/updated) before you restart or shutdown your Macintosh. This should cause no problems as the “DSP Preferences” file is small (usually less than 500 bytes) and the updated information records past DSP performance data as an estimate for future uses. Thus it is no real problem if a system crash should keep the data from getting written back. The estimates used will just be slightly less accurate as they result from older measurements. Luckily new selector/information pairs are rarely added to the file. To further reduce the chance of problems in situations where the system heap cannot grow, the memory block used to cache preference data is slightly larger than the current file size to provide a reserve for additional data.
Another subfunction of the DSPDispatch trap is used to repeatedly read a resource of type 'dspf' from the “System Enabler 088” (or the system file itself with System 7.5) and will DetachResource in order to return a non-resource handle to its caller. Thus the resource data is read from disk each time, still resulting in sound related disk trashing. Only sometimes the system's disk cache was able to prevent actual disk access. A head-patch to the DSPGetResource subfunction (0x124) will handle requests for resources of type 'dspf' and use HandToHand in order to copy the requested data into a new non-resource handle. The original resource handle is marked purgable so that its 4.5k can be reclaimed if the system runs out of memory (the resource will be reread from disk the next time it is accessed). For resource types other than 'dspf' and in case of any error the patch invokes the original ROM code. The ROM code seems to support an additional special resource file, which is examined if a request can't be satisfied by the currently open files. Although this feature appears to be currently unused, the fallback to the original routine should guarantee 100% compatibility.
If you want to trash your “DSP Preferences” file because it has grown too large, proceed as follows: restart your Mac and put the file into the trash before any sound is produced (except the usual noise at start-up). Hold down the SHIFT-key during start-up to prevent other extensions from accessing the Sound Manager before the Finder has been started, if required. Restart your Mac again, when the file has been trashed. After the first sound has been played the data kept in memory is updated and will be completely rewritten at shutdown (or prior to a restart) even if you trashed the prefs file.
2) Printing Bug
Some applications, which support Quickdraw printing with resolutions higher than 72dpi, fail to querry the active printer driver correctly and thus only print at the 72dpi default resolution. This is partly due to an incorrectly written application, but the ROM code for locating the active printer resource file contains a logical error, which makes the System think that the printer resource file cannot be found. As a result it returns a built-in default table, which describes a printer only capable of 72dpi printing, instead of the table of all resolutions supported by the currently active printer.
The error in the ROM code is a reversed condition: if we have already found the printer resource file, then try to locate it using an alternate method (alias stored in System file). The correct behavior would be to try the alias, if the primary method (refNum of currently open printer resource file) failed.
A patch to UseResFile looks for this specific call from ROM and continues with the correct thread of code depending on the result of the call.
Many Thanks To...
Dave Schutz for the original icon (taken from his Colossal Icons collection). Otherwise “sAVe the Disk 1.5” would have to go with the default icon for system extensions and would have no super hero to stand behind its noble aim.
Kurt Wiley for the modified icons which add the conformant look of a system extension to “sAVe the Disk 1.5”.
Matt Gough and Brian Stroud who brought the original Resource Manager deficiencies to my attention and made me put my vague ideas about a solution to the sound problem into actual code. From their AV Speedup distribution I got to know that there was no point in waiting for a fix from Apple DTS.
Steve Kiene who suggested a simpler and more effective solution for the Resource Manager problems and inspired the addition of the now obsolete disk cache fix. Check out his “AV Turbo ROM” control panel, if you want to see your AV Mac run faster than ever before (and you have 2 Megs of RAM to spare :-(). He provided some insights on the nature of the disk cache bug, too.
Malcolm Slaney from the ATG Perception Group who made the source to the DSP related application “VUMeter” publicly available. The included headers shed some light onto the DSP trap interface and turned mysterious entities into comprehensible data structures.
Patrick C. Beard who placed his ShowIconFamily code in the public domain. He made the successful installation of “sAVe the Disk 1.5” visible.
Legal Stuff
“sAVe the Disk 1.5” is provided free of charge but remains copyright Michael Thies. It may not be sold for profit but may otherwise be distributed freely in unmodified form and complete with this unaltered documentation. It may be included with ShareWare or commercial products, if I have been informed of the intended bundling in advance and it is made clear that “sAVe the Disk 1.5” itself comes free of charge and does not form part of the actual product sold.
“sAVe the Disk 1.5” is provided in the hope that it will be useful but comes with absolutely no warranty.
It was developed with “THINK C 7.0.4” (free upgrade from 6.0.1) so parts of it may be Copyright Symantec Corporation.
Several terms used above are trademarks of their respective holders.
Version History (condensed)
1.0 – 11/23/93 Initial Version
1.1 – 11/25/93 - fixed bug which could prevent access to prefs file
- UpdateGPBPrefFile subfunction will read prefs file into
memory, if GetGPBModes was never called before
- Resource Manager patches are more robust. Even in case of
errors no call to FlushFile should get accidently ignored.
- Icon gets displayed during start-up if installation
successful
- fine-tuned code
1.1.1 – 12/04/93 - added compatibility with version 1.0 of the System Enabler
(additional work will be needed to prevent ALL disk
trashing with the 1.0 Enabler)
- more work done at installation time => less resident code
1.2 – 12/05/93 - work around for 1.0 Enabler added: no more disk trashing
- no reliance on systems's disk cache with any Enabler
- resident code nearly back to old (v1.1) size :-(
1.2.1 – 12/07/93 - create copy of 'dspf' resource in heap zone where resource
was loaded (application vs. system heap)
1.3 – 12/18/93 - prefs file read at start-up => less resident code
- take full advantage of sys 7 file specs => even less code
- simpler, better, faster Resource Manager patch
- added disk cache patch
- more reliable if new prefs settings are to be added while
system heap cannot grow
- improved icons
1.3.1 – 01/05/94 - tail-patches to FlushFile no longer disable Resource Manager
patch (more reliable but slower secondary test added)
- only FlushFile calls from inside UpdateResFile are honored
(and calls from outside the Resource Manager)
- sensible behaviour if size of prefs data associated with a
given selector changes
- stream-lined balloon help
1.3.2 – 02/15/94 - icon plotting during start-up takes advantage of sys 7 icon
families
- special debug mode added, rename extension to "sAVe %"
1.3.3 – 04/30/94 - disk cache patch works even if the relevant trap has already